package cn.psvmc.cxzapi.model.store;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
 * 优惠券表
 * @Author auto
 * @Date 2024-08-15
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("t_coupon")
public class TCoupon implements Serializable {

    @Serial
    private static final long serialVersionUID = 7323022645674870513L;
    //优惠券id
    @TableId(value = "couponid", type = IdType.AUTO)
    private Integer couponid;

    //优惠券名称
    @TableField("name")
    private String name;

    //优惠券类型（1首期优惠券2其它期优惠券3总租金券）
    @TableField("coupon_type")
    private Integer couponType;

    //优惠券品类（1抵扣券2折扣券3特价券）
    @TableField("category")
    private Integer category;

    //使用订单范围（1首租使用2续租使用3买断使用）
    @TableField("order_scope")
    private Integer orderScope;

    //优惠券面值
    @TableField("money")
    private Double money;

    //使用条件（1签约价值2总租金3月租金）
    @TableField("use_condition")
    private Integer useCondition;

    //使用金额
    @TableField("limit_money")
    private Double limitMoney;

    //使用有效期（1相对期限2固定期限）
    @TableField("limit_type")
    private Integer limitType;

    //相对期限天数
    @TableField("limit_day")
    private Integer limitDay;

    //固定期限（开始使用时间）
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("use_time_begin")
    private LocalDateTime useTimeBegin;

    //固定期限（结束使用时间）
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField("use_time_end")
    private LocalDateTime useTimeEnd;

    //发放数量
    @TableField("num")
    private Integer num;

    //可用数量
    @TableField("use_num")
    private Integer useNum;

    //领取次数限制
    @TableField("limit_num")
    private Integer limitNum;

    //用户范围（1全量用户2指定用户）
    @TableField("user_scope")
    private Integer userScope;

    //去使用按钮类型
    @TableField("button_type")
    private Integer buttonType;

    //使用范围（1全品2限品）
    @TableField("use_scope")
    private Integer useScope;

    //自动发放（0否1是）
    @TableField("auto_issue")
    private Integer autoIssue;

    //规则说明
    @TableField("comm")
    private String comm;

    //优惠券编码
    @TableField("coupon_code")
    private String couponCode;

    //状态（1已上架 2已下架）
    @TableField("coupon_status")
    private Integer couponStatus;

    //是否删除（0未删除1已删除）
    @TableLogic
    @TableField("deleted")
    private Integer deleted;

    //商家id
    @TableField("storeid")
    private Integer storeid;

    //发放类型（1平台2商家）
    @TableField("grant_type")
    private Integer grantType;

    //创建人id
    @TableField(value = "createid", fill = FieldFill.INSERT)
    private Integer createid;

    //创建时间
    @TableField(value = "createtime", fill = FieldFill.INSERT)
    private LocalDateTime createtime;

    //操作人id
    @TableField(value = "updateid", fill = FieldFill.INSERT_UPDATE)
    private Integer updateid;

    //操作时间
    @TableField(value = "updatetime", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatetime;

    //版本号
    @TableField("rversion")
    @Version
    private Integer rversion;

    //指定用户
    @TableField(exist = false)
    private List<Integer> customerIds;

    //指定商品
    @TableField(exist = false)
    private List<Integer> goodsIds;

    //指定商品id
    @TableField(exist = false)
    private String goodsId;

    //已领数量
    @TableField(exist = false)
    private Integer getNum;

    //可用数量
    @TableField(exist = false)
    private Integer availableNum;

    //归属类型（1平台 2支付宝）
    @TableField("belong_type")
    private Integer belongType;

    //活动id
    @TableField("activity_id")
    private String activityId;

    //券码
    @TableField(exist = false)
    private String voucherCode;

    //券发放开始时间
    @TableField("publish_start_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date publishStartTime;

    //券发放结束时间
    @TableField("publish_end_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date publishEndTime;

    //封顶金额
    @TableField("ceiling_amount")
    private Double ceilingAmount;

    //符号类型（1大于等于X天 2小于等于X天 3等于X天 4大于等于X天且小于等于Y天 5小于等于X天或大于等于Y天）
    @TableField("symbol_type")
    private Integer symbolType;

    //X天
    @TableField("xday")
    private Integer xday;

    //Y天
    @TableField("yday")
    private Integer yday;

}
